package main

import (
	"fmt"
	"math"
	"strconv"
	"strings"
)

// mySqrt 求开平方根
// x 为整型，math.Sqrt(f)只能传进去float型，因此需要先转float然后再转回int
func mySqrt(x int) int {
	f := float64(x)
	ff := math.Sqrt(f)
	//fmt.Println(int(ff))
	return int(ff)
}

// isIntData 判断传入的值是否为日期的数值
func isIntData(keys string) int {
	key, errKeys := strconv.Atoi(keys) //字符串转数值，判断是否成功，不成功返回0，成功返回该数值
	if errKeys != nil {
		return 0
	} else {
		return key
	}
}

func main() {
	/*
		除了2所有的偶数都不是质数，那么能不能只遍历奇数。
		内层for循环作为除数（除数从3到被除数-1），通过规律发现，
		除数只需要从3 到 除数的开平方根数 就行了。
	*/

	var str string
	str += strconv.Itoa(2) //2 为特殊的素数，将其转换成字符串合并进str中
	for i := 3; i < 100; { //循环100个数
		primeBool := true
		for j := 3; j <= mySqrt(i); j++ { //找出100以内的所有素数，这里用到求开平方根
			if i%j == 0 {
				primeBool = false
				continue
			}
		}
		if primeBool {
			str += ","              // 每次循环前先添加逗号间隔，方便后面切割
			strI := strconv.Itoa(i) // 整型转换为字符串
			str += strI             // 将每个字符串数值进行拼接

		}
		i += 2
	}

	arrStr := strings.Split(str, ",") //将字符串以逗号分割成一个数组
	//fmt.Printf("%v ", str)
	//fmt.Printf("arrStr: %v ", arrStr)
	//fmt.Println()
	sum := 0
	for i := 0; i < len(arrStr); i++ {
		fmt.Printf("%v ", arrStr[i]) // 逐行输出，每五个换行
		sum += isIntData(arrStr[i])
		if (i+1)%5 == 0 {
			fmt.Println()
		}
	}
	fmt.Println("总和为：", sum)
}
